package com.ruoyi.littleRedBook.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.littleRedBook.domain.pojo.User;
import com.ruoyi.littleRedBook.mapper.UserMapper;
import com.ruoyi.littleRedBook.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.Objects;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public AjaxResult register(User user) {
        // 检查用户名是否已存在
        User existingUser = userMapper.selectByUsername(user.getUsername());
        if (existingUser != null) {
            return AjaxResult.error("用户名已存在");
        }

        // 密码加密
        String encryptedPassword = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setPassword(encryptedPassword);

        // 设置默认状态
        user.setStatus(1); // 1-正常

        // 保存用户信息
        int rows = userMapper.insert(user);
        if (rows > 0) {
            return AjaxResult.success("注册成功");
        } else {
            return AjaxResult.error("注册失败");
        }
    }

    @Override
    public AjaxResult login(String username, String password) {
        // 查询用户
        User user = userMapper.selectByUsername(username);
        if (user == null) {
            return AjaxResult.error("用户名不存在");
        }

        // 验证密码
        String encryptedPassword = DigestUtils.md5DigestAsHex(password.getBytes());
        if (!Objects.equals(user.getPassword(), encryptedPassword)) {
            return AjaxResult.error("密码错误");
        }

        // 验证用户状态
        if (user.getStatus() != 1) {
            return AjaxResult.error("用户状态异常，请联系管理员");
        }

        // 这里可以添加生成token的逻辑
        return AjaxResult.success("登录成功", user);
    }

    @Override
    public AjaxResult getCurrentUserInfo() {
        // 实际应用中应该从当前登录信息中获取用户ID
        // 这里简化处理，假设已获取到当前用户ID
        Long currentUserId = 1L; // 实际应用中需要替换为真实的当前用户ID

        User user = userMapper.selectById(currentUserId);
        if (user == null) {
            return AjaxResult.error("用户不存在");
        }

        // 密码脱敏
        user.setPassword(null);
        return AjaxResult.success(user);
    }

    @Override
    public AjaxResult updateUserInfo(User user) {
        // 实际应用中应该从当前登录信息中获取用户ID，并验证权限
        Long currentUserId = 1L; // 实际应用中需要替换为真实的当前用户ID

        // 确保只能修改自己的信息
        user.setId(currentUserId);

        // 不允许修改用户名和密码
        user.setUsername(null);
        user.setPassword(null);

        int rows = userMapper.updateById(user);
        if (rows > 0) {
            return AjaxResult.success("更新成功");
        } else {
            return AjaxResult.error("更新失败");
        }
    }

    @Override
    public AjaxResult updatePassword(String oldPassword, String newPassword) {
        // 实际应用中应该从当前登录信息中获取用户ID
        Long currentUserId = 1L; // 实际应用中需要替换为真实的当前用户ID

        User user = userMapper.selectById(currentUserId);
        if (user == null) {
            return AjaxResult.error("用户不存在");
        }

        // 验证旧密码
        String encryptedOldPassword = DigestUtils.md5DigestAsHex(oldPassword.getBytes());
        if (!Objects.equals(user.getPassword(), encryptedOldPassword)) {
            return AjaxResult.error("旧密码错误");
        }

        // 加密新密码并更新
        String encryptedNewPassword = DigestUtils.md5DigestAsHex(newPassword.getBytes());
        user.setPassword(encryptedNewPassword);

        int rows = userMapper.updateById(user);
        if (rows > 0) {
            return AjaxResult.success("密码修改成功");
        } else {
            return AjaxResult.error("密码修改失败");
        }
    }
}
